/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * CreateApplicationVersion response structure.
 * @class
 */
class CreateApplicationVersionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application version data (new).
         * @type {UserApplicationVersion || null}
         */
        this.Version = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Version) {
            let obj = new UserApplicationVersion();
            obj.deserialize(params.Version)
            this.Version = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteApplication request structure.
 * @class
 */
class DeleteApplicationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;

    }
}

/**
 * ModifyApplicationProject request structure.
 * @class
 */
class ModifyApplicationProjectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID returned by cloud.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Project name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Concurrency type required for project operation.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Whether to Enable Pre-launch.
         * @type {boolean || null}
         */
        this.IsPreload = null;

        /**
         * Application startup parameters.
         * @type {string || null}
         */
        this.ApplicationParams = null;

        /**
         * Cloud application project description.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Resolution, in the format of widthxheight, such as 1920x1080.
         * @type {string || null}
         */
        this.Resolution = null;

        /**
         * Frame rate.
         * @type {number || null}
         */
        this.FPS = null;

        /**
         * Waiting time for pre-launch.
         * @type {string || null}
         */
        this.PreloadDuration = null;

        /**
         * Waiting time for reconnection.
         * @type {string || null}
         */
        this.ReconnectTimeout = null;

        /**
         * Minimum bitrate, in Mbps.
         * @type {number || null}
         */
        this.MinBitrate = null;

        /**
         * Maximum bitrate, in Mbps.
         * @type {number || null}
         */
        this.MaxBitrate = null;

        /**
         * Upstream audio options.DisableMixIntoStreamPush: not mixing upstream audio in streaming.
         * @type {string || null}
         */
        this.UpstreamAudioOption = null;

        /**
         * Video encoding configuration.
         * @type {VideoEncodeConfig || null}
         */
        this.VideoEncodeConfig = null;

        /**
         * Upper limit of the XR application resolution.If the project concurrency type is L or L2, the upper limit is 5000; if the project concurrency type is XL2, the upper limit is 6000.
         * @type {number || null}
         */
        this.XRMaxWidth = null;

        /**
         * ID of the background image COS file.
         * @type {string || null}
         */
        this.BackgroundImageCOSFileId = null;

        /**
         * Disabled code list.
         * @type {Array.<string> || null}
         */
        this.DisableVideoCodecs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.IsPreload = 'IsPreload' in params ? params.IsPreload : null;
        this.ApplicationParams = 'ApplicationParams' in params ? params.ApplicationParams : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Resolution = 'Resolution' in params ? params.Resolution : null;
        this.FPS = 'FPS' in params ? params.FPS : null;
        this.PreloadDuration = 'PreloadDuration' in params ? params.PreloadDuration : null;
        this.ReconnectTimeout = 'ReconnectTimeout' in params ? params.ReconnectTimeout : null;
        this.MinBitrate = 'MinBitrate' in params ? params.MinBitrate : null;
        this.MaxBitrate = 'MaxBitrate' in params ? params.MaxBitrate : null;
        this.UpstreamAudioOption = 'UpstreamAudioOption' in params ? params.UpstreamAudioOption : null;

        if (params.VideoEncodeConfig) {
            let obj = new VideoEncodeConfig();
            obj.deserialize(params.VideoEncodeConfig)
            this.VideoEncodeConfig = obj;
        }
        this.XRMaxWidth = 'XRMaxWidth' in params ? params.XRMaxWidth : null;
        this.BackgroundImageCOSFileId = 'BackgroundImageCOSFileId' in params ? params.BackgroundImageCOSFileId : null;
        this.DisableVideoCodecs = 'DisableVideoCodecs' in params ? params.DisableVideoCodecs : null;

    }
}

/**
 * BindConcurrentPackagesToProject request structure.
 * @class
 */
class BindConcurrentPackagesToProjectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Concurrency pack ID list.
         * @type {Array.<string> || null}
         */
        this.ConcurrentIds = null;

        /**
         * Cloud application project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConcurrentIds = 'ConcurrentIds' in params ? params.ConcurrentIds : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

    }
}

/**
 * DescribeApplicationList response structure.
 * @class
 */
class DescribeApplicationListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application list information.
         * @type {Array.<UserApplicationInfo> || null}
         */
        this.UserApplicationList = null;

        /**
         * Total number of applications.
         * @type {number || null}
         */
        this.ApplicationTotal = null;

        /**
         * Mobile application list information.
         * @type {Array.<UserMobileApplicationInfo> || null}
         */
        this.UserMobileApplicationList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.UserApplicationList) {
            this.UserApplicationList = new Array();
            for (let z in params.UserApplicationList) {
                let obj = new UserApplicationInfo();
                obj.deserialize(params.UserApplicationList[z]);
                this.UserApplicationList.push(obj);
            }
        }
        this.ApplicationTotal = 'ApplicationTotal' in params ? params.ApplicationTotal : null;

        if (params.UserMobileApplicationList) {
            this.UserMobileApplicationList = new Array();
            for (let z in params.UserMobileApplicationList) {
                let obj = new UserMobileApplicationInfo();
                obj.deserialize(params.UserMobileApplicationList[z]);
                this.UserMobileApplicationList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyConcurrentPackage request structure.
 * @class
 */
class ModifyConcurrentPackageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Concurrency pack ID.
         * @type {string || null}
         */
        this.ConcurrentId = null;

        /**
         * Concurrency pack name.
         * @type {string || null}
         */
        this.Name = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConcurrentId = 'ConcurrentId' in params ? params.ConcurrentId : null;
        this.Name = 'Name' in params ? params.Name : null;

    }
}

/**
 * Application basic data.
 * @class
 */
class ApplicationBaseInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application window usage mode (ApplicationDesktop: Captures the entire desktop; ApplicationWindow: Captures only the application window).
         * @type {string || null}
         */
        this.WindowUseType = null;

        /**
         * Application window name.
         * @type {string || null}
         */
        this.WindowName = null;

        /**
         * Application window class name.
         * @type {string || null}
         */
        this.WindowClassName = null;

        /**
         * Application window capture mode (HOOK: default mode; DDA_CUT: compatible mode).
         * @type {string || null}
         */
        this.WindowCaptureMode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WindowUseType = 'WindowUseType' in params ? params.WindowUseType : null;
        this.WindowName = 'WindowName' in params ? params.WindowName : null;
        this.WindowClassName = 'WindowClassName' in params ? params.WindowClassName : null;
        this.WindowCaptureMode = 'WindowCaptureMode' in params ? params.WindowCaptureMode : null;

    }
}

/**
 * CreateSession request structure.
 * @class
 */
class CreateSessionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique user ID, which is customized by you and is not parsed by CAR. Based on your needs, you can either define unique IDs for users or use timestamps to generate random IDs. Make sure the same ID is used when a user reconnects to your application.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Public IP address of the user's client, which is used for nearby scheduling.
         * @type {string || null}
         */
        this.UserIp = null;

        /**
         * Client-side session information, which is obtained from the SDK. If `RunMode` is `RunWithoutClient`, this parameter can be empty.
         * @type {string || null}
         */
        this.ClientSession = null;

        /**
         * On-cloud running mode.RunWithoutClient: Keeps the application running on the cloud even when there are no client connections.Empty string (default): Keeps the application running on the cloud only when there are client connections.
         * @type {string || null}
         */
        this.RunMode = null;

        /**
         * Application startup parameters.This parameter is effective for multi-application projects.
This parameter is effective for single-application projects with prelaunch disabled.This parameter is ineffective for single-application projects with prelaunch enabled.
Note: When this parameter is effective, it will be appended to the startup parameters of application or project configuration in the console.
For example, for a single-application project with prelaunch disabled, if its startup parameter `bar` is `0` for project configuration in the console and the `ApplicationParameters` parameter `foo` is `1`, the actual application startup parameters will be `bar=0 and foo=1`.
         * @type {string || null}
         */
        this.ApplicationParameters = null;

        /**
         * [Multi-person Interaction] Homeowner's user ID, which is required in multi-person interaction mode.
If the user is the homeowner, HostUserID must be the same as UserID.
If the user is not the homeowner, HostUserID must be the homeowner's HostUserID.
         * @type {string || null}
         */
        this.HostUserId = null;

        /**
         * [Multi-person Interaction] Role.
Player: a user who can operate the application via keyboard, mouse, etc.
Viewer: a user who can only watch the video in the room but cannot operate the application.
         * @type {string || null}
         */
        this.Role = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserIp = 'UserIp' in params ? params.UserIp : null;
        this.ClientSession = 'ClientSession' in params ? params.ClientSession : null;
        this.RunMode = 'RunMode' in params ? params.RunMode : null;
        this.ApplicationParameters = 'ApplicationParameters' in params ? params.ApplicationParameters : null;
        this.HostUserId = 'HostUserId' in params ? params.HostUserId : null;
        this.Role = 'Role' in params ? params.Role : null;

    }
}

/**
 * DescribeApplicationPathList response structure.
 * @class
 */
class DescribeApplicationPathListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application .exe file path list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.PathList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PathList = 'PathList' in params ? params.PathList : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * BindConcurrentPackagesToProject response structure.
 * @class
 */
class BindConcurrentPackagesToProjectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * StartPublishStreamWithURL response structure.
 * @class
 */
class StartPublishStreamWithURLResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UnbindConcurrentPackagesFromProject response structure.
 * @class
 */
class UnbindConcurrentPackagesFromProjectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteApplicationVersion request structure.
 * @class
 */
class DeleteApplicationVersionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Application version ID.
         * @type {string || null}
         */
        this.ApplicationVersionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.ApplicationVersionId = 'ApplicationVersionId' in params ? params.ApplicationVersionId : null;

    }
}

/**
 * CreateApplicationProject response structure.
 * @class
 */
class CreateApplicationProjectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Generated project ID.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateApplicationSnapshot request structure.
 * @class
 */
class CreateApplicationSnapshotRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Application download address (if the version is created by file upload, this parameter is an empty string).
         * @type {string || null}
         */
        this.ApplicationDownloadUrl = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.ApplicationDownloadUrl = 'ApplicationDownloadUrl' in params ? params.ApplicationDownloadUrl : null;

    }
}

/**
 * DescribeApplicationProjects response structure.
 * @class
 */
class DescribeApplicationProjectsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project list.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ApplicationProject> || null}
         */
        this.Projects = null;

        /**
         * Total number.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Projects) {
            this.Projects = new Array();
            for (let z in params.Projects) {
                let obj = new ApplicationProject();
                obj.deserialize(params.Projects[z]);
                this.Projects.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Mobile application data information.
 * @class
 */
class UserMobileApplicationInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Application name.
         * @type {string || null}
         */
        this.ApplicationName = null;

        /**
         * Application type (cloud APK: application APK).
         * @type {string || null}
         */
        this.ApplicationType = null;

        /**
         * Application running status (ApplicationRunning: normal running; ApplicationNoPackage: no available package).
         * @type {string || null}
         */
        this.ApplicationRunStatus = null;

        /**
         * Application update status (ApplicationUpdateCreating: version creation in progress; ApplicationUpdateCreateFail: version creation failed; ApplicationUpdateNoReleased: version to be released; ApplicationUpdateReleased: version release completed; ApplicationUpdateNormal: none).
         * @type {string || null}
         */
        this.ApplicationUpdateStatus = null;

        /**
         * Application creation time.
         * @type {string || null}
         */
        this.ApplicationCreateTime = null;

        /**
         * List of application versions.
         * @type {Array.<UserApplicationVersion> || null}
         */
        this.ApplicationVersions = null;

        /**
         * Application nature (PUBLIC: public application; PRIVATE: user application).
         * @type {string || null}
         */
        this.ApplicationNature = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.ApplicationName = 'ApplicationName' in params ? params.ApplicationName : null;
        this.ApplicationType = 'ApplicationType' in params ? params.ApplicationType : null;
        this.ApplicationRunStatus = 'ApplicationRunStatus' in params ? params.ApplicationRunStatus : null;
        this.ApplicationUpdateStatus = 'ApplicationUpdateStatus' in params ? params.ApplicationUpdateStatus : null;
        this.ApplicationCreateTime = 'ApplicationCreateTime' in params ? params.ApplicationCreateTime : null;

        if (params.ApplicationVersions) {
            this.ApplicationVersions = new Array();
            for (let z in params.ApplicationVersions) {
                let obj = new UserApplicationVersion();
                obj.deserialize(params.ApplicationVersions[z]);
                this.ApplicationVersions.push(obj);
            }
        }
        this.ApplicationNature = 'ApplicationNature' in params ? params.ApplicationNature : null;

    }
}

/**
 * Query filter criteria.
 * @class
 */
class Filter extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter field name (ApplicationId: application ID; ApplicationName: application name; ApplicationRunStatus: running status; ApplicationUpdateStatus: update status).
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Filter value set (When the filter name is ApplicationRunStatus, the values can be [ApplicationDeleting: application deletion in progress; ApplicationCreateFail: application creation failed; ApplicationCreating: application creation in progress; ApplicationRunning: normal running; ApplicationNoConfigured: main execution program path not configured]. When the filter name is ApplicationUpdateStatus, the values can be [ApplicationUpdateCreating: version creation in progress; ApplicationUpdateCreateFail: version creation failed; ApplicationUpdateNoReleased: version to be released; ApplicationUpdateReleased: version release completed; ApplicationUpdateNormal: none]).
         * @type {Array.<string> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * SetApplicationVersionOnline request structure.
 * @class
 */
class SetApplicationVersionOnlineRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Application version ID.
         * @type {string || null}
         */
        this.ApplicationVersionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.ApplicationVersionId = 'ApplicationVersionId' in params ? params.ApplicationVersionId : null;

    }
}

/**
 * CreateApplicationSnapshot response structure.
 * @class
 */
class CreateApplicationSnapshotResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeApplicationFileInfo response structure.
 * @class
 */
class DescribeApplicationFileInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application file data list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<UserApplicationFileInfo> || null}
         */
        this.FileInfoList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.FileInfoList) {
            this.FileInfoList = new Array();
            for (let z in params.FileInfoList) {
                let obj = new UserApplicationFileInfo();
                obj.deserialize(params.FileInfoList[z]);
                this.FileInfoList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Video encoding configuration.
 * @class
 */
class VideoEncodeConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * Streaming GOP length, in seconds.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.StreamPushGOPSeconds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StreamPushGOPSeconds = 'StreamPushGOPSeconds' in params ? params.StreamPushGOPSeconds : null;

    }
}

/**
 * ModifyMobileApplicationInfo response structure.
 * @class
 */
class ModifyMobileApplicationInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyApplicationBaseInfo request structure.
 * @class
 */
class ModifyApplicationBaseInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Application program execution path.
         * @type {string || null}
         */
        this.ApplicationExePath = null;

        /**
         * Application process list.
         * @type {string || null}
         */
        this.ApplicationInterList = null;

        /**
         * Application basic data.
         * @type {ApplicationBaseInfo || null}
         */
        this.ApplicationBaseInfo = null;

        /**
         * Application startup parameters.
         * @type {string || null}
         */
        this.ApplicationParams = null;

        /**
         * Application name.
         * @type {string || null}
         */
        this.ApplicationName = null;

        /**
         * Application repository information list.
         * @type {Array.<UserApplicationStore> || null}
         */
        this.ApplicationStores = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.ApplicationExePath = 'ApplicationExePath' in params ? params.ApplicationExePath : null;
        this.ApplicationInterList = 'ApplicationInterList' in params ? params.ApplicationInterList : null;

        if (params.ApplicationBaseInfo) {
            let obj = new ApplicationBaseInfo();
            obj.deserialize(params.ApplicationBaseInfo)
            this.ApplicationBaseInfo = obj;
        }
        this.ApplicationParams = 'ApplicationParams' in params ? params.ApplicationParams : null;
        this.ApplicationName = 'ApplicationName' in params ? params.ApplicationName : null;

        if (params.ApplicationStores) {
            this.ApplicationStores = new Array();
            for (let z in params.ApplicationStores) {
                let obj = new UserApplicationStore();
                obj.deserialize(params.ApplicationStores[z]);
                this.ApplicationStores.push(obj);
            }
        }

    }
}

/**
 * ModifyApplicationBaseInfo response structure.
 * @class
 */
class ModifyApplicationBaseInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeConcurrentPackages response structure.
 * @class
 */
class DescribeConcurrentPackagesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Concurrency pack list.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ApplicationConcurrentPackage> || null}
         */
        this.ConcurrentPackages = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.ConcurrentPackages) {
            this.ConcurrentPackages = new Array();
            for (let z in params.ConcurrentPackages) {
                let obj = new ApplicationConcurrentPackage();
                obj.deserialize(params.ConcurrentPackages[z]);
                this.ConcurrentPackages.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeApplicationVersion request structure.
 * @class
 */
class DescribeApplicationVersionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application version ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;

    }
}

/**
 * DescribeApplicationProjectAdvancedConfig request structure.
 * @class
 */
class DescribeApplicationProjectAdvancedConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

    }
}

/**
 * DeleteApplicationProjects response structure.
 * @class
 */
class DeleteApplicationProjectsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCosCredential response structure.
 * @class
 */
class DescribeCosCredentialResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cos SecretID
         * @type {string || null}
         */
        this.SecretID = null;

        /**
         * Cos SecretKey
         * @type {string || null}
         */
        this.SecretKey = null;

        /**
         * Cos SessionToken
         * @type {string || null}
         */
        this.SessionToken = null;

        /**
         * Cos Bucket
         * @type {string || null}
         */
        this.CosBucket = null;

        /**
         * Cos Region
         * @type {string || null}
         */
        this.CosRegion = null;

        /**
         * COS operation path.
         * @type {string || null}
         */
        this.Path = null;

        /**
         * Start time of the COS key.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * Expiration time of the COS key.
         * @type {number || null}
         */
        this.ExpiredTime = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecretID = 'SecretID' in params ? params.SecretID : null;
        this.SecretKey = 'SecretKey' in params ? params.SecretKey : null;
        this.SessionToken = 'SessionToken' in params ? params.SessionToken : null;
        this.CosBucket = 'CosBucket' in params ? params.CosBucket : null;
        this.CosRegion = 'CosRegion' in params ? params.CosRegion : null;
        this.Path = 'Path' in params ? params.Path : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.ExpiredTime = 'ExpiredTime' in params ? params.ExpiredTime : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeApplicationStatus request structure.
 * @class
 */
class DescribeApplicationStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID list.
         * @type {Array.<string> || null}
         */
        this.ApplicationIdList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationIdList = 'ApplicationIdList' in params ? params.ApplicationIdList : null;

    }
}

/**
 * CreateApplication request structure.
 * @class
 */
class CreateApplicationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application name.
         * @type {string || null}
         */
        this.ApplicationName = null;

        /**
         * Application type (Application3D: cloud 3D; ApplicationXR: cloud XR; ApplicationAPK: cloud APK).
         * @type {string || null}
         */
        this.ApplicationType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationName = 'ApplicationName' in params ? params.ApplicationName : null;
        this.ApplicationType = 'ApplicationType' in params ? params.ApplicationType : null;

    }
}

/**
 * DescribeConcurrentCount request structure.
 * @class
 */
class DescribeConcurrentCountRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

    }
}

/**
 * Cloud application project type.
 * @class
 */
class ApplicationProject extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Project name.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Project description.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Concurrency type required for project operation.S1: concurrency for rendering small cloud applications.M1: concurrency for rendering medium cloud applications.L1: concurrency for rendering large cloud applications.L2: concurrency for rendering large cloud applications.XL2: concurrency for rendering extra large cloud applications.MM1_HD: concurrency for performance-based cloud ARM (HD).MM1_FHD: concurrency for performance-based cloud ARM (FHD).Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Cloud application ID.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Pre-launch.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsPreload = null;

        /**
         * Number of concurrencies already configured.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Amount = null;

        /**
         * Number of concurrencies in use.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Using = null;

        /**
         * Application status. NoConcurrent: no concurrency pack configured; Online: activated. Cloud application status: applicationCreating: creating; applicationCreateFail: creation failed; applicationDeleting: deleting; applicationNoConfigured: startup parameters not configured.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ApplicationStatus = null;

        /**
         * Application startup parameters.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ApplicationParams = null;

        /**
         * Creation time.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Application name.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ApplicationName = null;

        /**
         * Resolution, in the format of widthxheight, such as 1920x1080.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Resolution = null;

        /**
         * Project type.SHARED: shared by all applications.EXCLUSIVE (default value): dedicated for one application.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProjectType = null;

        /**
         * Purpose.EXPERIENCE: Experience.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Purpose = null;

        /**
         * Application distribution area. Standard areas are as follows. ap-chinese-mainland: Chinese mainland; na-north-america: North America; eu-frankfurt: Frankfurt; ap-mumbai: Mumbai; ap-tokyo: Tokyo; ap-seoul: Seoul; ap-singapore: Singapore; ap-bangkok: Bangkok; ap-hongkong: Hong Kong (China). Fusion areas are as follows. me-middle-east-fusion: Middle East; na-north-america-fusion: North America; sa-south-america-fusion: South America; ap-tokyo-fusion: Tokyo; ap-seoul-fusion: Seoul; eu-frankfurt-fusion: Frankfurt; ap-singapore-fusion: Singapore; ap-hongkong-fusion: Hong Kong (China).Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.ApplicationRegions = null;

        /**
         * Concurrency area. Standard areas are as follows. ap-chinese-mainland: Chinese mainland; na-north-america: North America; eu-frankfurt: Frankfurt; ap-mumbai: Mumbai; ap-tokyo: Tokyo; ap-seoul: Seoul; ap-singapore: Singapore; ap-bangkok: Bangkok; ap-hongkong: Hong Kong (China). Fusion areas are as follows. me-middle-east-fusion: Middle East; na-north-america-fusion: North America; sa-south-america-fusion: South America; ap-tokyo-fusion: Tokyo; ap-seoul-fusion: Seoul; eu-frankfurt-fusion: Frankfurt; ap-singapore-fusion: Singapore; ap-hongkong-fusion: Hong Kong (China).Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.ConcurrentRegions = null;

        /**
         * Project category.DESKTOP: desktop (default value).MOBILE: mobile.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProjectCategory = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.IsPreload = 'IsPreload' in params ? params.IsPreload : null;
        this.Amount = 'Amount' in params ? params.Amount : null;
        this.Using = 'Using' in params ? params.Using : null;
        this.ApplicationStatus = 'ApplicationStatus' in params ? params.ApplicationStatus : null;
        this.ApplicationParams = 'ApplicationParams' in params ? params.ApplicationParams : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ApplicationName = 'ApplicationName' in params ? params.ApplicationName : null;
        this.Resolution = 'Resolution' in params ? params.Resolution : null;
        this.ProjectType = 'ProjectType' in params ? params.ProjectType : null;
        this.Purpose = 'Purpose' in params ? params.Purpose : null;
        this.ApplicationRegions = 'ApplicationRegions' in params ? params.ApplicationRegions : null;
        this.ConcurrentRegions = 'ConcurrentRegions' in params ? params.ConcurrentRegions : null;
        this.ProjectCategory = 'ProjectCategory' in params ? params.ProjectCategory : null;

    }
}

/**
 * DeleteApplicationVersion response structure.
 * @class
 */
class DeleteApplicationVersionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeConcurrentSummary request structure.
 * @class
 */
class DescribeConcurrentSummaryRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * ModifyApplicationVersion response structure.
 * @class
 */
class ModifyApplicationVersionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCosCredential request structure.
 * @class
 */
class DescribeCosCredentialRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Application file name (the file must be a compressed package with a zip/rar/7z file name extension).
         * @type {string || null}
         */
        this.ApplicationFileName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.ApplicationFileName = 'ApplicationFileName' in params ? params.ApplicationFileName : null;

    }
}

/**
 * StopPublishStream response structure.
 * @class
 */
class StopPublishStreamResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateApplicationProject request structure.
 * @class
 */
class CreateApplicationProjectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project name, which is user-defined.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Bound application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Concurrency type required for project operation.S1: concurrency for rendering small cloud applications.M1: concurrency for rendering medium cloud applications.L1: concurrency for rendering large cloud applications.L2: concurrency for rendering large cloud applications.XL2: concurrency for rendering extra large cloud applications.MM1_HD: concurrency for performance-based cloud ARM (HD).MM1_FHD: concurrency for performance-based cloud ARM (FHD).
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Whether to enable warm-up. The default value is false.
         * @type {boolean || null}
         */
        this.IsPreload = null;

        /**
         * Application startup parameters.
         * @type {string || null}
         */
        this.ApplicationParams = null;

        /**
         * Resolution, in the format of widthxheight, such as 1920x1080.
         * @type {string || null}
         */
        this.Resolution = null;

        /**
         * Project type.SHARED: shared by all applications.EXCLUSIVE (default value): dedicated for one application.
         * @type {string || null}
         */
        this.ProjectType = null;

        /**
         * Frame rate.
         * @type {number || null}
         */
        this.FPS = null;

        /**
         * Waiting time for application pre-launch.
         * @type {string || null}
         */
        this.PreloadDuration = null;

        /**
         * Waiting time for reconnection.
         * @type {string || null}
         */
        this.ReconnectTimeout = null;

        /**
         * Minimum bitrate, in Mbps.
         * @type {number || null}
         */
        this.MinBitrate = null;

        /**
         * Maximum bitrate, in Mbps.
         * @type {number || null}
         */
        this.MaxBitrate = null;

        /**
         * Upstream audio options.DisableMixIntoStreamPush: not mixing upstream audio in streaming.
         * @type {string || null}
         */
        this.UpstreamAudioOption = null;

        /**
         * Video encoding configuration.
         * @type {VideoEncodeConfig || null}
         */
        this.VideoEncodeConfig = null;

        /**
         * Upper limit of the XR application resolution.If the project concurrency type is L or L2, the upper limit is 5000; if the project concurrency type is XL2, the upper limit is 6000.
         * @type {number || null}
         */
        this.XRMaxWidth = null;

        /**
         * ID of the background image COS file.
         * @type {string || null}
         */
        this.BackgroundImageCOSFileId = null;

        /**
         * Project category.DESKTOP: desktop (default value).MOBILE: mobile.
         * @type {string || null}
         */
        this.ProjectCategory = null;

        /**
         * Disabled code list.
         * @type {Array.<string> || null}
         */
        this.DisableVideoCodecs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.IsPreload = 'IsPreload' in params ? params.IsPreload : null;
        this.ApplicationParams = 'ApplicationParams' in params ? params.ApplicationParams : null;
        this.Resolution = 'Resolution' in params ? params.Resolution : null;
        this.ProjectType = 'ProjectType' in params ? params.ProjectType : null;
        this.FPS = 'FPS' in params ? params.FPS : null;
        this.PreloadDuration = 'PreloadDuration' in params ? params.PreloadDuration : null;
        this.ReconnectTimeout = 'ReconnectTimeout' in params ? params.ReconnectTimeout : null;
        this.MinBitrate = 'MinBitrate' in params ? params.MinBitrate : null;
        this.MaxBitrate = 'MaxBitrate' in params ? params.MaxBitrate : null;
        this.UpstreamAudioOption = 'UpstreamAudioOption' in params ? params.UpstreamAudioOption : null;

        if (params.VideoEncodeConfig) {
            let obj = new VideoEncodeConfig();
            obj.deserialize(params.VideoEncodeConfig)
            this.VideoEncodeConfig = obj;
        }
        this.XRMaxWidth = 'XRMaxWidth' in params ? params.XRMaxWidth : null;
        this.BackgroundImageCOSFileId = 'BackgroundImageCOSFileId' in params ? params.BackgroundImageCOSFileId : null;
        this.ProjectCategory = 'ProjectCategory' in params ? params.ProjectCategory : null;
        this.DisableVideoCodecs = 'DisableVideoCodecs' in params ? params.DisableVideoCodecs : null;

    }
}

/**
 * StopPublishStream request structure.
 * @class
 */
class StopPublishStreamRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique user ID, which is customized by you and is not parsed by CAR. Based on your needs, you can either define unique IDs for users or use timestamps to generate random IDs. Make sure the same ID is used when a user reconnects to your application.
         * @type {string || null}
         */
        this.UserId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;

    }
}

/**
 * CreateApplicationVersion request structure.
 * @class
 */
class CreateApplicationVersionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Application file name (desktop applications should be files in zip/rar/7z format, and mobile applications should be files in apk format).
         * @type {string || null}
         */
        this.ApplicationFileName = null;

        /**
         * Region for application version distribution.
         * @type {Array.<string> || null}
         */
        this.ApplicationVersionRegions = null;

        /**
         * Application update method.
         * @type {string || null}
         */
        this.ApplicationVersionUpdateMode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.ApplicationFileName = 'ApplicationFileName' in params ? params.ApplicationFileName : null;
        this.ApplicationVersionRegions = 'ApplicationVersionRegions' in params ? params.ApplicationVersionRegions : null;
        this.ApplicationVersionUpdateMode = 'ApplicationVersionUpdateMode' in params ? params.ApplicationVersionUpdateMode : null;

    }
}

/**
 * DescribeApplicationStatus response structure.
 * @class
 */
class DescribeApplicationStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application status list.
         * @type {Array.<UserApplicationStatus> || null}
         */
        this.StatusList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.StatusList) {
            this.StatusList = new Array();
            for (let z in params.StatusList) {
                let obj = new UserApplicationStatus();
                obj.deserialize(params.StatusList[z]);
                this.StatusList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DestroySession response structure.
 * @class
 */
class DestroySessionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeApplicationVersion response structure.
 * @class
 */
class DescribeApplicationVersionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of application versions.
         * @type {Array.<UserApplicationVersion> || null}
         */
        this.Versions = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Versions) {
            this.Versions = new Array();
            for (let z in params.Versions) {
                let obj = new UserApplicationVersion();
                obj.deserialize(params.Versions[z]);
                this.Versions.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeApplicationPathList request structure.
 * @class
 */
class DescribeApplicationPathListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cloud application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Cloud application version ID.
         * @type {string || null}
         */
        this.ApplicationVersionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.ApplicationVersionId = 'ApplicationVersionId' in params ? params.ApplicationVersionId : null;

    }
}

/**
 * ResetConcurrentPackages request structure.
 * @class
 */
class ResetConcurrentPackagesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Concurrency pack ID array.
         * @type {Array.<string> || null}
         */
        this.ConcurrentPackageIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConcurrentPackageIds = 'ConcurrentPackageIds' in params ? params.ConcurrentPackageIds : null;

    }
}

/**
 * StartPublishStream response structure.
 * @class
 */
class StartPublishStreamResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateSession response structure.
 * @class
 */
class CreateSessionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Server-side session information, which is returned to the SDK.
         * @type {string || null}
         */
        this.ServerSession = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServerSession = 'ServerSession' in params ? params.ServerSession : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Background image information.
 * @class
 */
class BackgroundImage extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the COS file.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.COSFileId = null;

        /**
         * Download URL.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.URL = null;

        /**
         * Name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Creation time.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.COSFileId = 'COSFileId' in params ? params.COSFileId : null;
        this.URL = 'URL' in params ? params.URL : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

    }
}

/**
 * ModifyApplicationProject response structure.
 * @class
 */
class ModifyApplicationProjectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeApplicationList request structure.
 * @class
 */
class DescribeApplicationListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application list offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Application quantity limit.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter criteria.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Application category (DESKTOP: desktop; MOBILE: mobile).
         * @type {string || null}
         */
        this.ApplicationCategory = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.ApplicationCategory = 'ApplicationCategory' in params ? params.ApplicationCategory : null;

    }
}

/**
 * StartPublishStream request structure.
 * @class
 */
class StartPublishStreamRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique user ID, which is customized by you and is not parsed by CAR. It will be used as the `StreamId` for streaming. For example, if the bound streaming domain is **abc.livepush.myqcloud.com**, the streaming address will be **rtmp://abc.livepush.myqcloud.com/live/UserId?txSecret=xxx&txTime=xxx**.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Streaming parameter, which is a custom parameter carried during streaming.
         * @type {string || null}
         */
        this.PublishStreamArgs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.PublishStreamArgs = 'PublishStreamArgs' in params ? params.PublishStreamArgs : null;

    }
}

/**
 * ModifyConcurrentPackage response structure.
 * @class
 */
class ModifyConcurrentPackageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UnbindConcurrentPackagesFromProject request structure.
 * @class
 */
class UnbindConcurrentPackagesFromProjectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Concurrency pack ID list.
         * @type {Array.<string> || null}
         */
        this.ConcurrentIds = null;

        /**
         * Cloud application project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConcurrentIds = 'ConcurrentIds' in params ? params.ConcurrentIds : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

    }
}

/**
 * Application status information.
 * @class
 */
class UserApplicationStatus extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Application running status (ApplicationDeleting: application deletion in progress; ApplicationCreateFail: application creation failed; ApplicationCreating: application creation in progress; ApplicationRunning: normal running; ApplicationNoConfigured: main execution program path not configured; ApplicationNoPackage: no available package).
         * @type {string || null}
         */
        this.ApplicationRunStatus = null;

        /**
         * Application update status (ApplicationUpdateCreating: version creation in progress; ApplicationUpdateCreateFail: version creation failed; ApplicationUpdateNoReleased: version to be released; ApplicationUpdateReleased: version release completed; ApplicationUpdateNormal: none).
         * @type {string || null}
         */
        this.ApplicationUpdateStatus = null;

        /**
         * Application update progress.
         * @type {number || null}
         */
        this.ApplicationUpdateProgress = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.ApplicationRunStatus = 'ApplicationRunStatus' in params ? params.ApplicationRunStatus : null;
        this.ApplicationUpdateStatus = 'ApplicationUpdateStatus' in params ? params.ApplicationUpdateStatus : null;
        this.ApplicationUpdateProgress = 'ApplicationUpdateProgress' in params ? params.ApplicationUpdateProgress : null;

    }
}

/**
 * Application data information.
 * @class
 */
class UserApplicationInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Application name.
         * @type {string || null}
         */
        this.ApplicationName = null;

        /**
         * Application type (cloud 3D: Application3D; cloud XR: ApplicationXR; cloud Web: ApplicationWeb).
         * @type {string || null}
         */
        this.ApplicationType = null;

        /**
         * Application program execution path.
         * @type {string || null}
         */
        this.ApplicationExePath = null;

        /**
         * Application process list.
         * @type {string || null}
         */
        this.ApplicationInterList = null;

        /**
         * Application startup parameters.
         * @type {string || null}
         */
        this.ApplicationParams = null;

        /**
         * Application running status (ApplicationDeleting: application deletion in progress; ApplicationCreateFail: application creation failed; ApplicationCreating: application creation in progress; ApplicationRunning: normal running; ApplicationNoConfigured: main execution program path not configured).
         * @type {string || null}
         */
        this.ApplicationRunStatus = null;

        /**
         * Application update status (ApplicationUpdateCreating: version creation in progress; ApplicationUpdateCreateFail: version creation failed; ApplicationUpdateNoReleased: version to be released; ApplicationUpdateReleased: version release completed; ApplicationUpdateNormal: none).
         * @type {string || null}
         */
        this.ApplicationUpdateStatus = null;

        /**
         * Application creation time.
         * @type {string || null}
         */
        this.ApplicationCreateTime = null;

        /**
         * List of application versions.
         * @type {Array.<UserApplicationVersion> || null}
         */
        this.ApplicationVersions = null;

        /**
         * Application basic data.
         * @type {ApplicationBaseInfo || null}
         */
        this.ApplicationBaseInfo = null;

        /**
         * Application update progress.
         * @type {number || null}
         */
        this.ApplicationUpdateProgress = null;

        /**
         * Application nature (PUBLIC: public application; PRIVATE: user application).
         * @type {string || null}
         */
        this.ApplicationNature = null;

        /**
         * Application repository list.
         * @type {Array.<UserApplicationStore> || null}
         */
        this.ApplicationStores = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.ApplicationName = 'ApplicationName' in params ? params.ApplicationName : null;
        this.ApplicationType = 'ApplicationType' in params ? params.ApplicationType : null;
        this.ApplicationExePath = 'ApplicationExePath' in params ? params.ApplicationExePath : null;
        this.ApplicationInterList = 'ApplicationInterList' in params ? params.ApplicationInterList : null;
        this.ApplicationParams = 'ApplicationParams' in params ? params.ApplicationParams : null;
        this.ApplicationRunStatus = 'ApplicationRunStatus' in params ? params.ApplicationRunStatus : null;
        this.ApplicationUpdateStatus = 'ApplicationUpdateStatus' in params ? params.ApplicationUpdateStatus : null;
        this.ApplicationCreateTime = 'ApplicationCreateTime' in params ? params.ApplicationCreateTime : null;

        if (params.ApplicationVersions) {
            this.ApplicationVersions = new Array();
            for (let z in params.ApplicationVersions) {
                let obj = new UserApplicationVersion();
                obj.deserialize(params.ApplicationVersions[z]);
                this.ApplicationVersions.push(obj);
            }
        }

        if (params.ApplicationBaseInfo) {
            let obj = new ApplicationBaseInfo();
            obj.deserialize(params.ApplicationBaseInfo)
            this.ApplicationBaseInfo = obj;
        }
        this.ApplicationUpdateProgress = 'ApplicationUpdateProgress' in params ? params.ApplicationUpdateProgress : null;
        this.ApplicationNature = 'ApplicationNature' in params ? params.ApplicationNature : null;

        if (params.ApplicationStores) {
            this.ApplicationStores = new Array();
            for (let z in params.ApplicationStores) {
                let obj = new UserApplicationStore();
                obj.deserialize(params.ApplicationStores[z]);
                this.ApplicationStores.push(obj);
            }
        }

    }
}

/**
 * DeleteApplication response structure.
 * @class
 */
class DeleteApplicationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteApplicationProjects request structure.
 * @class
 */
class DeleteApplicationProjectsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID list of cloud application projects.
         * @type {Array.<string> || null}
         */
        this.ProjectIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectIds = 'ProjectIds' in params ? params.ProjectIds : null;

    }
}

/**
 * DescribeConcurrentPackages request structure.
 * @class
 */
class DescribeConcurrentPackagesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Subscript.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of entries per page.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter List
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * DescribeConcurrentSummary response structure.
 * @class
 */
class DescribeConcurrentSummaryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of prepaid (monthly subscription) concurrencies.
         * @type {number || null}
         */
        this.PrepaidConcurrentTotal = null;

        /**
         * Remaining duration of an hourly package.
         * @type {string || null}
         */
        this.HourlyRemainDuration = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PrepaidConcurrentTotal = 'PrepaidConcurrentTotal' in params ? params.PrepaidConcurrentTotal : null;
        this.HourlyRemainDuration = 'HourlyRemainDuration' in params ? params.HourlyRemainDuration : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateApplication response structure.
 * @class
 */
class CreateApplicationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * StartPublishStreamWithURL request structure.
 * @class
 */
class StartPublishStreamWithURLRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique user ID, which is customized by you and is not parsed by CAR.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Streaming address. Only RTMP is supported for streaming currently.
         * @type {string || null}
         */
        this.PublishStreamURL = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.PublishStreamURL = 'PublishStreamURL' in params ? params.PublishStreamURL : null;

    }
}

/**
 * ResetConcurrentPackages response structure.
 * @class
 */
class ResetConcurrentPackagesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Application version information.
 * @class
 */
class UserApplicationVersion extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application version ID.
         * @type {string || null}
         */
        this.ApplicationVersionId = null;

        /**
         * Application version size.
         * @type {number || null}
         */
        this.ApplicationVersionSize = null;

        /**
         * Application version status (Uploading: uploading; Creating: in creation; CreateFailed: creation failed; Deleting: deleting; Inuse: current version; Normal: to be released; Usable: available).
         * @type {string || null}
         */
        this.ApplicationVersionStatus = null;

        /**
         * Application version name.
         * @type {string || null}
         */
        this.ApplicationVersionName = null;

        /**
         * Application version creation time.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Region for application version distribution (
Standard zone:
ap-chinese-mainland: Chinese mainland
na-north-america: North America
eu-frankfurt: Frankfurt
ap-mumbai: Mumbai
ap-tokyo: Tokyo
ap-seoul: Seoul
ap-singapore: Singapore
ap-bangkok: Bangkok
ap-hongkong: Hong Kong (China)
Integration zone:
me-middle-east-fusion: Middle East
na-north-america-fusion: North America
sa-south-america-fusion: South America
ap-tokyo-fusion: Tokyo
ap-seoul-fusion: Seoul
eu-frankfurt-fusion: Frankfurt
ap-singapore-fusion: Singapore
ap-hongkong-fusion: Hong Kong (China)
).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.ApplicationVersionRegions = null;

        /**
         * Application version update method.
FULL: full update.
INCREMENT: incremental update.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ApplicationVersionUpdateMode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationVersionId = 'ApplicationVersionId' in params ? params.ApplicationVersionId : null;
        this.ApplicationVersionSize = 'ApplicationVersionSize' in params ? params.ApplicationVersionSize : null;
        this.ApplicationVersionStatus = 'ApplicationVersionStatus' in params ? params.ApplicationVersionStatus : null;
        this.ApplicationVersionName = 'ApplicationVersionName' in params ? params.ApplicationVersionName : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ApplicationVersionRegions = 'ApplicationVersionRegions' in params ? params.ApplicationVersionRegions : null;
        this.ApplicationVersionUpdateMode = 'ApplicationVersionUpdateMode' in params ? params.ApplicationVersionUpdateMode : null;

    }
}

/**
 * DescribeApplicationProjectAdvancedConfig response structure.
 * @class
 */
class DescribeApplicationProjectAdvancedConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application startup parameters.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ApplicationParams = null;

        /**
         * Resolution, in the format of widthxheight, such as 1920x1080.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Resolution = null;

        /**
         * Frame rate. Valid values: 0, 30, 60.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.FPS = null;

        /**
         * Minimum bitrate, in Mbps.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MinBitrate = null;

        /**
         * Maximum bitrate, in Mbps.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MaxBitrate = null;

        /**
         * Waiting time for application pre-launch.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PreloadDuration = null;

        /**
         * Waiting time for reconnection.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ReconnectTimeout = null;

        /**
         * Upstream audio options.DisableMixIntoStreamPush: not mixing upstream audio in streaming.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpstreamAudioOption = null;

        /**
         * Video encoding configuration.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {VideoEncodeConfig || null}
         */
        this.VideoEncodeConfig = null;

        /**
         * Upper limit of the XR application resolution.If the project concurrency type is L or L2, the upper limit is 5000; if the project concurrency type is XL2, the upper limit is 6000.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.XRMaxWidth = null;

        /**
         * Background image information.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {BackgroundImage || null}
         */
        this.BackgroundImage = null;

        /**
         * Disabled code list.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.DisableVideoCodecs = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationParams = 'ApplicationParams' in params ? params.ApplicationParams : null;
        this.Resolution = 'Resolution' in params ? params.Resolution : null;
        this.FPS = 'FPS' in params ? params.FPS : null;
        this.MinBitrate = 'MinBitrate' in params ? params.MinBitrate : null;
        this.MaxBitrate = 'MaxBitrate' in params ? params.MaxBitrate : null;
        this.PreloadDuration = 'PreloadDuration' in params ? params.PreloadDuration : null;
        this.ReconnectTimeout = 'ReconnectTimeout' in params ? params.ReconnectTimeout : null;
        this.UpstreamAudioOption = 'UpstreamAudioOption' in params ? params.UpstreamAudioOption : null;

        if (params.VideoEncodeConfig) {
            let obj = new VideoEncodeConfig();
            obj.deserialize(params.VideoEncodeConfig)
            this.VideoEncodeConfig = obj;
        }
        this.XRMaxWidth = 'XRMaxWidth' in params ? params.XRMaxWidth : null;

        if (params.BackgroundImage) {
            let obj = new BackgroundImage();
            obj.deserialize(params.BackgroundImage)
            this.BackgroundImage = obj;
        }
        this.DisableVideoCodecs = 'DisableVideoCodecs' in params ? params.DisableVideoCodecs : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ApplyConcurrent response structure.
 * @class
 */
class ApplyConcurrentResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SetApplicationVersionOnline response structure.
 * @class
 */
class SetApplicationVersionOnlineResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of application versions.
         * @type {Array.<UserApplicationVersion> || null}
         */
        this.Versions = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Versions) {
            this.Versions = new Array();
            for (let z in params.Versions) {
                let obj = new UserApplicationVersion();
                obj.deserialize(params.Versions[z]);
                this.Versions.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ApplyConcurrent request structure.
 * @class
 */
class ApplyConcurrentRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique user ID, which is customized by you and is not parsed by CAR. Based on your needs, you can either define unique IDs for users or use timestamps to generate random IDs. Make sure the same ID is used when a user reconnects to your application.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Public IP address of the user's client, which is used for nearby scheduling.
         * @type {string || null}
         */
        this.UserIp = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Application version ID. If the application of the current version is requested, you do not need to fill in this field. If the application of the other versions is requested, you need to specify the version through this field.
         * @type {string || null}
         */
        this.ApplicationVersionId = null;

        /**
         * Application ID, which is used only by the multi-application project to specify applications. For a single-application project, this parameter is ignored, and the application bound to the project will be used.
         * @type {string || null}
         */
        this.ApplicationId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserIp = 'UserIp' in params ? params.UserIp : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ApplicationVersionId = 'ApplicationVersionId' in params ? params.ApplicationVersionId : null;
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;

    }
}

/**
 * Application file information.
 * @class
 */
class UserApplicationFileInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application file path.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FilePath = null;

        /**
         * File status. NO_EXIST: The file does not exist; EXIST: The file exists.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FileState = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FilePath = 'FilePath' in params ? params.FilePath : null;
        this.FileState = 'FileState' in params ? params.FileState : null;

    }
}

/**
 * ModifyMobileApplicationInfo request structure.
 * @class
 */
class ModifyMobileApplicationInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Application name.
         * @type {string || null}
         */
        this.ApplicationName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.ApplicationName = 'ApplicationName' in params ? params.ApplicationName : null;

    }
}

/**
 * DescribeConcurrentCount response structure.
 * @class
 */
class DescribeConcurrentCountResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of concurrencies.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The number of concurrent executions, including all non-idle concurrent executions such as those in prelaunch, connected, waiting for reconnection, and to be cleaned up or recovered. Therefore, refreshing projects or disconnecting user connections with concurrency packages will affect this value.
         * @type {number || null}
         */
        this.Running = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.Running = 'Running' in params ? params.Running : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DestroySession request structure.
 * @class
 */
class DestroySessionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique user ID, which is customized by you and is not parsed by CAR. Based on your needs, you can either define unique IDs for users or use timestamps to generate random IDs. Make sure the same ID is used when a user reconnects to your application.
         * @type {string || null}
         */
        this.UserId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;

    }
}

/**
 * DescribeApplicationFileInfo request structure.
 * @class
 */
class DescribeApplicationFileInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Application file path list.
         * @type {Array.<string> || null}
         */
        this.FilePathList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.FilePathList = 'FilePathList' in params ? params.FilePathList : null;

    }
}

/**
 * Cloud application concurrency packs.
 * @class
 */
class ApplicationConcurrentPackage extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * Application repository information.
 * @class
 */
class UserApplicationStore extends  AbstractModel {
    constructor(){
        super();

        /**
         * COS bucket name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CosBucket = null;

        /**
         * COS bucket region.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CosRegion = null;

        /**
         * Repository type. LOG: application logs; ARCHIVE: application archive.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StoreType = null;

        /**
         * Repository status. ON: enabled; OFF: disabled.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StoreState = null;

        /**
         * Repository path.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StorePath = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CosBucket = 'CosBucket' in params ? params.CosBucket : null;
        this.CosRegion = 'CosRegion' in params ? params.CosRegion : null;
        this.StoreType = 'StoreType' in params ? params.StoreType : null;
        this.StoreState = 'StoreState' in params ? params.StoreState : null;
        this.StorePath = 'StorePath' in params ? params.StorePath : null;

    }
}

/**
 * ModifyApplicationVersion request structure.
 * @class
 */
class ModifyApplicationVersionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Application version ID.
         * @type {string || null}
         */
        this.ApplicationVersionId = null;

        /**
         * Application version name.
         * @type {string || null}
         */
        this.ApplicationVersionName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.ApplicationVersionId = 'ApplicationVersionId' in params ? params.ApplicationVersionId : null;
        this.ApplicationVersionName = 'ApplicationVersionName' in params ? params.ApplicationVersionName : null;

    }
}

/**
 * DescribeApplicationProjects request structure.
 * @class
 */
class DescribeApplicationProjectsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Subscript.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of entries per page.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Project category.DESKTOP: desktop (default value).MOBILE: mobile.
         * @type {string || null}
         */
        this.ProjectCategory = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.ProjectCategory = 'ProjectCategory' in params ? params.ProjectCategory : null;

    }
}

module.exports = {
    CreateApplicationVersionResponse: CreateApplicationVersionResponse,
    DeleteApplicationRequest: DeleteApplicationRequest,
    ModifyApplicationProjectRequest: ModifyApplicationProjectRequest,
    BindConcurrentPackagesToProjectRequest: BindConcurrentPackagesToProjectRequest,
    DescribeApplicationListResponse: DescribeApplicationListResponse,
    ModifyConcurrentPackageRequest: ModifyConcurrentPackageRequest,
    ApplicationBaseInfo: ApplicationBaseInfo,
    CreateSessionRequest: CreateSessionRequest,
    DescribeApplicationPathListResponse: DescribeApplicationPathListResponse,
    BindConcurrentPackagesToProjectResponse: BindConcurrentPackagesToProjectResponse,
    StartPublishStreamWithURLResponse: StartPublishStreamWithURLResponse,
    UnbindConcurrentPackagesFromProjectResponse: UnbindConcurrentPackagesFromProjectResponse,
    DeleteApplicationVersionRequest: DeleteApplicationVersionRequest,
    CreateApplicationProjectResponse: CreateApplicationProjectResponse,
    CreateApplicationSnapshotRequest: CreateApplicationSnapshotRequest,
    DescribeApplicationProjectsResponse: DescribeApplicationProjectsResponse,
    UserMobileApplicationInfo: UserMobileApplicationInfo,
    Filter: Filter,
    SetApplicationVersionOnlineRequest: SetApplicationVersionOnlineRequest,
    CreateApplicationSnapshotResponse: CreateApplicationSnapshotResponse,
    DescribeApplicationFileInfoResponse: DescribeApplicationFileInfoResponse,
    VideoEncodeConfig: VideoEncodeConfig,
    ModifyMobileApplicationInfoResponse: ModifyMobileApplicationInfoResponse,
    ModifyApplicationBaseInfoRequest: ModifyApplicationBaseInfoRequest,
    ModifyApplicationBaseInfoResponse: ModifyApplicationBaseInfoResponse,
    DescribeConcurrentPackagesResponse: DescribeConcurrentPackagesResponse,
    DescribeApplicationVersionRequest: DescribeApplicationVersionRequest,
    DescribeApplicationProjectAdvancedConfigRequest: DescribeApplicationProjectAdvancedConfigRequest,
    DeleteApplicationProjectsResponse: DeleteApplicationProjectsResponse,
    DescribeCosCredentialResponse: DescribeCosCredentialResponse,
    DescribeApplicationStatusRequest: DescribeApplicationStatusRequest,
    CreateApplicationRequest: CreateApplicationRequest,
    DescribeConcurrentCountRequest: DescribeConcurrentCountRequest,
    ApplicationProject: ApplicationProject,
    DeleteApplicationVersionResponse: DeleteApplicationVersionResponse,
    DescribeConcurrentSummaryRequest: DescribeConcurrentSummaryRequest,
    ModifyApplicationVersionResponse: ModifyApplicationVersionResponse,
    DescribeCosCredentialRequest: DescribeCosCredentialRequest,
    StopPublishStreamResponse: StopPublishStreamResponse,
    CreateApplicationProjectRequest: CreateApplicationProjectRequest,
    StopPublishStreamRequest: StopPublishStreamRequest,
    CreateApplicationVersionRequest: CreateApplicationVersionRequest,
    DescribeApplicationStatusResponse: DescribeApplicationStatusResponse,
    DestroySessionResponse: DestroySessionResponse,
    DescribeApplicationVersionResponse: DescribeApplicationVersionResponse,
    DescribeApplicationPathListRequest: DescribeApplicationPathListRequest,
    ResetConcurrentPackagesRequest: ResetConcurrentPackagesRequest,
    StartPublishStreamResponse: StartPublishStreamResponse,
    CreateSessionResponse: CreateSessionResponse,
    BackgroundImage: BackgroundImage,
    ModifyApplicationProjectResponse: ModifyApplicationProjectResponse,
    DescribeApplicationListRequest: DescribeApplicationListRequest,
    StartPublishStreamRequest: StartPublishStreamRequest,
    ModifyConcurrentPackageResponse: ModifyConcurrentPackageResponse,
    UnbindConcurrentPackagesFromProjectRequest: UnbindConcurrentPackagesFromProjectRequest,
    UserApplicationStatus: UserApplicationStatus,
    UserApplicationInfo: UserApplicationInfo,
    DeleteApplicationResponse: DeleteApplicationResponse,
    DeleteApplicationProjectsRequest: DeleteApplicationProjectsRequest,
    DescribeConcurrentPackagesRequest: DescribeConcurrentPackagesRequest,
    DescribeConcurrentSummaryResponse: DescribeConcurrentSummaryResponse,
    CreateApplicationResponse: CreateApplicationResponse,
    StartPublishStreamWithURLRequest: StartPublishStreamWithURLRequest,
    ResetConcurrentPackagesResponse: ResetConcurrentPackagesResponse,
    UserApplicationVersion: UserApplicationVersion,
    DescribeApplicationProjectAdvancedConfigResponse: DescribeApplicationProjectAdvancedConfigResponse,
    ApplyConcurrentResponse: ApplyConcurrentResponse,
    SetApplicationVersionOnlineResponse: SetApplicationVersionOnlineResponse,
    ApplyConcurrentRequest: ApplyConcurrentRequest,
    UserApplicationFileInfo: UserApplicationFileInfo,
    ModifyMobileApplicationInfoRequest: ModifyMobileApplicationInfoRequest,
    DescribeConcurrentCountResponse: DescribeConcurrentCountResponse,
    DestroySessionRequest: DestroySessionRequest,
    DescribeApplicationFileInfoRequest: DescribeApplicationFileInfoRequest,
    ApplicationConcurrentPackage: ApplicationConcurrentPackage,
    UserApplicationStore: UserApplicationStore,
    ModifyApplicationVersionRequest: ModifyApplicationVersionRequest,
    DescribeApplicationProjectsRequest: DescribeApplicationProjectsRequest,

}
